<?php

namespace App\Providers;

use App\Http\Common\JWT;
use App\Models\AdminUser;
use App\User;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Boot the authentication services for the application.
     *
     * @return void
     */
    public function boot()
    {
        // Here you may define how you wish users to be authenticated for your Lumen
        // application. The callback which receives the incoming request instance
        // should return either a User instance or null. You're free to obtain
        // the User instance via an API token or any other method necessary.

        $this->app['auth']->viaRequest('api', function ($request) {

            $header = $request->header('authorization');
            if (!$header) {
                return makeResponse([], '登录失效!', 401);
            };
            $token = substr($header, 7);

            $jwtToken = JWT::verifyToken($token);

            if ($jwtToken['jti'] !== env('JWT_CODE')) {
                return makeResponse([], '签名错误', 500);
            } else {
                $user = AdminUser::where(['username' => $jwtToken['name']])->first()->toArray();
                $status = passwordVerify($jwtToken['pass'], $user['password']);
                unset($user['password']);

                if ($status) {
                    return $user;

                } else {
                    return makeResponse([], 'Token验证失败~', 500);
                }

            }
        });
    }
}
